package com.gitee.srurl.sid.domain;

/**
 * sid 构成：0      1111111        1100     11111       11000                     11111111111111111111  --> 42位
 * -------- 固定    年份0-127       月       日           时(25-31回拨使用)           顺序ID（0-1048575）
 * -------- 1   +    7        +    4    +   5     +      5                  +             20
 * 1小时可以产生100多万个ID  但是这个短ID相比于雪花算法那些来说的使用面会窄很多  如果一小时不止100万个ID的话 不建议使用这种ID
 * 时间字段 00000 - 11000 为正常24小时生成的ID使用  11001 - 11111 这8个小时的ID用于处理时钟回拨时临时ID使用
 * 所以如果允许时钟回拨 并且时钟真的回拨了 会出现回拨这段时间ID大于当前正常ID最大值的情况 如果不行有这种情况又想允许时钟回拨的话 可以根据雪花算法那边借用以后时钟的方式处理
 * 这个在前面102年转为62进制后只有7位 可以用于短网址映射
 * sid使用到的常量
 *
 * @author zxw
 * @date 2023/4/25 21:18
 */
public interface SidConstant {

    /**
     * 起始年份 id可以使用的范围是起始年份后的127年
     */
    long START_YEAR = 2023;

    /**
     * 是否允许时钟回拨 默认允许时钟回拨
     */
    boolean ALLOW_CLOCK_BACKWARDS = true;

    /**
     * 序列号12位（表示只允许workId的范围为：0-4095）
     */
    long SEQUENCE_BITS = 20L;

    /**
     * 序列掩码，用于限定序列最大值
     */
    long SEQUENCE_MASK = ~(-1L << SEQUENCE_BITS);

    /**
     * 时间毫秒数左移22位
     */
//    long TIMESTAMP_LEFT_SHIFT = SEQUENCE_BITS + WORKER_ID_BITS + DATA_CENTER_ID_BITS;
}
